Práctica II

Análisis clúster

Jonás Jiménez Gil (Universidad Complutense de Madrid)
2022-10-19

Instrucciones (leer antes de empezar)

Paquetes necesarios

Necesitaremos los siguientes paquetes:

Carga de datos

El archivo de datos a usar será provincias.xlsx

provincias <- read_xlsx(path = "./provincias.xlsx")

El fichero contiene información socioeconómica de las provincias españolas

glimpse(provincias)
Rows: 52
Columns: 19
$ Prov          <chr> "Albacete", "Alicante", "Almería", "Álava", "A…
$ Poblacion     <dbl> 396987, 1868438, 701688, 321932, 1061756, 6909…
$ Mortalidad    <dbl> 9.41, 8.00, 6.91, 7.72, 12.16, 9.54, 7.08, 8.1…
$ Natalidad     <dbl> 9.02, 8.52, 11.41, 10.26, 6.26, 8.96, 9.51, 9.…
$ IPC           <dbl> 101.819, 102.309, 101.454, 102.743, 102.070, 1…
$ NumEmpresas   <dbl> 26701, 130438, 40327, 19548, 67451, 39640, 871…
$ Industria     <dbl> 3332, 9992, 2191, 2048, 3496, 3059, 4413, 2741…
$ Construccion  <dbl> 3428, 17418, 5388, 2669, 8435, 4599, 14485, 50…
$ CTH           <dbl> 11111, 52720, 18184, 7557, 28045, 18420, 30644…
$ Infor         <dbl> 189, 1851, 366, 323, 787, 332, 1403, 11134, 15…
$ AFS           <dbl> 624, 2745, 944, 354, 1445, 948, 1627, 8829, 16…
$ APT           <dbl> 3278, 19865, 5840, 3341, 10598, 5235, 16444, 8…
$ TasaActividad <dbl> 57.72, 58.21, 60.63, 57.86, 51.42, 56.00, 68.6…
$ TasaParo      <dbl> 23.28, 23.39, 31.08, 13.33, 16.97, 29.63, 13.8…
$ Ocupados      <dbl> 144.8, 687.1, 234.4, 133.0, 389.0, 224.6, 555.…
$ PIB           <dbl> 7235991, 32139347, 11909684, 10716021, 2177043…
$ CANE          <dbl> 20888, 25968, 22945, 3691, 23910, 37438, 10748…
$ TVF           <dbl> 215948, 1274096, 395086, 155767, 613905, 37249…
$ VS            <dbl> 30244, 326705, 72486, 9791, 73250, 49441, 8571…

Algunas de las variables son:

Ejercicio 1:

Calcula la matriz de covarianzas y de correlaciones. Calcula de nuevo la matriz deUsa el paquete {corrplot} para una representación gráfica de la misma. Detalla y comenta lo que consideres para su correcta interpretación.

# Antes de empezar a trabajar convertimos a data.frame para tener row.names y eliminamos Prov
provincias_df <- as.data.frame(provincias) %>%
  select(-Prov)
row.names(provincias_df) <- provincias %>% pull(Prov)

# Generamos una matriz de covarianzas
cov_mat <-
  cov(provincias_df)
cov_mat
                  Poblacion    Mortalidad     Natalidad           IPC
Poblacion      1.332402e+12 -8.410948e+05  2.825777e+05  3.166674e+05
Mortalidad    -8.410948e+05  4.497279e+00 -3.340672e+00  3.274592e-01
Natalidad      2.825777e+05 -3.340672e+00  4.574438e+00 -4.449502e-01
IPC            3.166674e+05  3.274592e-01 -4.449502e-01  6.713054e-01
NumEmpresas    1.039158e+11 -5.936911e+04  2.033182e+04  2.705253e+04
Industria      5.377378e+09 -2.886718e+03  9.580191e+02  1.660830e+03
Construccion   1.189841e+10 -6.572561e+03  1.987946e+03  3.431592e+03
CTH            3.469477e+10 -2.107415e+04  6.546901e+03  8.959516e+03
Infor          3.252415e+09 -1.643783e+03  7.308544e+02  7.343294e+02
AFS            2.368926e+09 -1.338667e+03  4.630778e+02  5.468300e+02
APT            2.308163e+10 -1.279613e+04  4.942979e+03  5.560493e+03
TasaActividad  1.559201e+06 -6.287982e+00  4.084571e+00  2.971163e-01
TasaParo       7.925493e+04 -6.858438e+00  5.710437e+00 -3.325189e+00
Ocupados       5.587768e+08 -3.378416e+02  1.162152e+02  1.427088e+02
PIB            3.710902e+13 -2.054416e+07  7.978598e+06  9.542769e+06
CANE           1.600881e+09  4.972107e+02 -3.756189e+03 -2.235199e+03
TVF            6.151011e+11 -3.790429e+05  9.714958e+04  1.502562e+05
VS             3.780485e+10 -3.053086e+04 -3.420846e+03  9.054892e+03
                NumEmpresas     Industria  Construccion           CTH
Poblacion      1.039158e+11  5.377378e+09  1.189841e+10  3.469477e+10
Mortalidad    -5.936911e+04 -2.886718e+03 -6.572561e+03 -2.107415e+04
Natalidad      2.033182e+04  9.580191e+02  1.987946e+03  6.546901e+03
IPC            2.705253e+04  1.660830e+03  3.431592e+03  8.959516e+03
NumEmpresas    8.193867e+09  4.234973e+08  9.429470e+08  2.714669e+09
Industria      4.234973e+08  2.332528e+07  4.887123e+07  1.423064e+08
Construccion   9.429470e+08  4.887123e+07  1.096990e+08  3.115202e+08
CTH            2.714669e+09  1.423064e+08  3.115202e+08  9.104959e+08
Infor          2.599586e+08  1.281172e+07  2.993090e+07  8.362453e+07
AFS            1.858531e+08  9.461821e+06  2.132317e+07  6.137273e+07
APT            1.829553e+09  9.205337e+07  2.104079e+08  5.978440e+08
TasaActividad  1.216057e+05  5.696595e+03  1.444756e+04  3.975735e+04
TasaParo      -3.548038e+04 -2.705065e+03 -7.970151e+03 -1.511967e+03
Ocupados       4.394446e+07  2.258171e+06  5.058452e+06  1.454283e+07
PIB            2.937681e+12  1.492101e+11  3.381971e+11  9.608873e+11
CANE           5.790435e+07  8.528402e+06  4.444882e+06  4.030497e+07
TVF            4.782485e+10  2.507663e+09  5.496909e+09  1.608442e+10
VS             2.828095e+09  1.583504e+08  3.369756e+08  1.008605e+09
                      Infor           AFS           APT TasaActividad
Poblacion      3.252415e+09  2.368926e+09  2.308163e+10  1.559201e+06
Mortalidad    -1.643783e+03 -1.338667e+03 -1.279613e+04 -6.287982e+00
Natalidad      7.308544e+02  4.630778e+02  4.942979e+03  4.084571e+00
IPC            7.343294e+02  5.468300e+02  5.560493e+03  2.971163e-01
NumEmpresas    2.599586e+08  1.858531e+08  1.829553e+09  1.216057e+05
Industria      1.281172e+07  9.461821e+06  9.205337e+07  5.696595e+03
Construccion   2.993090e+07  2.132317e+07  2.104079e+08  1.444756e+04
CTH            8.362453e+07  6.137273e+07  5.978440e+08  3.975735e+04
Infor          8.898914e+06  5.978443e+06  6.023438e+07  3.716075e+03
AFS            5.978443e+06  4.278261e+06  4.184881e+07  2.654717e+03
APT            6.023438e+07  4.184881e+07  4.163130e+08  2.740845e+04
TasaActividad  3.716075e+03  2.654717e+03  2.740845e+04  1.634163e+01
TasaParo      -2.263650e+03 -4.574284e+02 -1.117688e+04  7.836922e-01
Ocupados       1.399042e+06  1.000399e+06  9.839308e+06  6.957010e+02
PIB            9.633966e+10  6.706243e+10  6.665333e+11  4.381319e+07
CANE          -2.823547e+06  2.530272e+06 -1.628132e+06 -6.728514e+03
TVF            1.462541e+09  1.088854e+09  1.050208e+10  7.101507e+05
VS             7.053626e+07  6.463586e+07  5.658359e+08  6.182306e+04
                   TasaParo      Ocupados           PIB          CANE
Poblacion      7.925493e+04  5.587768e+08  3.710902e+13  1.600881e+09
Mortalidad    -6.858438e+00 -3.378416e+02 -2.054416e+07  4.972107e+02
Natalidad      5.710437e+00  1.162152e+02  7.978598e+06 -3.756189e+03
IPC           -3.325189e+00  1.427088e+02  9.542769e+06 -2.235199e+03
NumEmpresas   -3.548038e+04  4.394446e+07  2.937681e+12  5.790435e+07
Industria     -2.705065e+03  2.258171e+06  1.492101e+11  8.528402e+06
Construccion  -7.970151e+03  5.058452e+06  3.381971e+11  4.444882e+06
CTH           -1.511967e+03  1.454283e+07  9.608873e+11  4.030497e+07
Infor         -2.263650e+03  1.399042e+06  9.633966e+10 -2.823547e+06
AFS           -4.574284e+02  1.000399e+06  6.706243e+10  2.530272e+06
APT           -1.117688e+04  9.839308e+06  6.665333e+11 -1.628132e+06
TasaActividad  7.836922e-01  6.957010e+02  4.381319e+07 -6.728514e+03
TasaParo       4.858657e+01 -1.851125e+02 -2.176911e+07  3.888675e+04
Ocupados      -1.851125e+02  2.364606e+05  1.581249e+10  3.381542e+05
PIB           -2.176911e+07  1.581249e+10  1.074005e+15 -3.316858e+09
CANE           3.888675e+04  3.381542e+05 -3.316858e+09  2.035655e+08
TVF            4.343622e+04  2.568868e+08  1.686704e+13  1.174057e+09
VS             3.836534e+04  1.516691e+07  8.891085e+11  2.769825e+08
                        TVF            VS
Poblacion      6.151011e+11  3.780485e+10
Mortalidad    -3.790429e+05 -3.053086e+04
Natalidad      9.714958e+04 -3.420846e+03
IPC            1.502562e+05  9.054892e+03
NumEmpresas    4.782485e+10  2.828095e+09
Industria      2.507663e+09  1.583504e+08
Construccion   5.496909e+09  3.369756e+08
CTH            1.608442e+10  1.008605e+09
Infor          1.462541e+09  7.053626e+07
AFS            1.088854e+09  6.463586e+07
APT            1.050208e+10  5.658359e+08
TasaActividad  7.101507e+05  6.182306e+04
TasaParo       4.343622e+04  3.836534e+04
Ocupados       2.568868e+08  1.516691e+07
PIB            1.686704e+13  8.891085e+11
CANE           1.174057e+09  2.769825e+08
TVF            2.893064e+11  2.075973e+10
VS             2.075973e+10  3.341943e+09
# Generamos una matriz de correlaciones
cor_mat <-
  cor(provincias_df)
cor_mat
                 Poblacion  Mortalidad   Natalidad         IPC
Poblacion      1.000000000 -0.34359937  0.11445938  0.33483095
Mortalidad    -0.343599371  1.00000000 -0.73652925  0.18846127
Natalidad      0.114459382 -0.73652925  1.00000000 -0.25391157
IPC            0.334830949  0.18846127 -0.25391157  1.00000000
NumEmpresas    0.994533276 -0.30927237  0.10501778  0.36475679
Industria      0.964582668 -0.28184861  0.09274529  0.41971227
Construccion   0.984169957 -0.29590918  0.08874307  0.39988432
CTH            0.996110046 -0.32933367  0.10144436  0.36239775
Infor          0.944538806 -0.25983697  0.11454957  0.30044315
AFS            0.992202208 -0.30518551  0.10467705  0.32267001
APT            0.980028733 -0.29572891  0.11326870  0.33261608
TasaActividad  0.334146420 -0.73348067  0.47242170  0.08970542
TasaParo       0.009850323 -0.46397242  0.38303840 -0.58223482
Ocupados       0.995500027 -0.32761124  0.11174153  0.35818832
PIB            0.980976869 -0.29560406  0.11382945  0.35539497
CANE           0.097205159  0.01643287 -0.12309106 -0.19120709
TVF            0.990717314 -0.33230307  0.08444871  0.34095210
VS             0.566539758 -0.24903743 -0.02766720  0.19117175
              NumEmpresas   Industria Construccion          CTH
Poblacion      0.99453328  0.96458267   0.98416996  0.996110046
Mortalidad    -0.30927237 -0.28184861  -0.29590918 -0.329333667
Natalidad      0.10501778  0.09274529   0.08874307  0.101444356
IPC            0.36475679  0.41971227   0.39988432  0.362397751
NumEmpresas    1.00000000  0.96870767   0.99458429  0.993878918
Industria      0.96870767  1.00000000   0.96613670  0.976499325
Construccion   0.99458429  0.96613670   1.00000000  0.985702825
CTH            0.99387892  0.97649932   0.98570283  1.000000000
Infor          0.96270044  0.88925300   0.95796587  0.929022359
AFS            0.99263984  0.94716931   0.98427617  0.983338024
APT            0.99058205  0.93414916   0.98457937  0.971043919
TasaActividad  0.33232416  0.29177908   0.34122871  0.325934818
TasaParo      -0.05623228 -0.08035375  -0.10917096 -0.007188617
Ocupados       0.99834423  0.96153241   0.99320060  0.991129933
PIB            0.99027798  0.94271768   0.98529352  0.971695960
CANE           0.04483474  0.12376621   0.02974452  0.093619748
TVF            0.98226824  0.96533176   0.97574923  0.991031374
VS             0.54044321  0.56716093   0.55654176  0.578205863
                    Infor         AFS          APT TasaActividad
Poblacion      0.94453881  0.99220221  0.980028733    0.33414642
Mortalidad    -0.25983697 -0.30518551 -0.295728912   -0.73348067
Natalidad      0.11454957  0.10467705  0.113268704    0.47242170
IPC            0.30044315  0.32267001  0.332616084    0.08970542
NumEmpresas    0.96270044  0.99263984  0.990582046    0.33232416
Industria      0.88925300  0.94716931  0.934149162    0.29177908
Construccion   0.95796587  0.98427617  0.984579370    0.34122871
CTH            0.92902236  0.98333802  0.971043919    0.32593482
Infor          1.00000000  0.96891562  0.989614166    0.30815427
AFS            0.96891562  1.00000000  0.991606815    0.31749496
APT            0.98961417  0.99160681  1.000000000    0.33229728
TasaActividad  0.30815427  0.31749496  0.332297285    1.00000000
TasaParo      -0.10886358 -0.03172717 -0.078587345    0.02781248
Ocupados       0.96445717  0.99462721  0.991688246    0.35391218
PIB            0.98544753  0.98933314  0.996801753    0.33071519
CANE          -0.06633983  0.08573962 -0.005592777   -0.11665930
TVF            0.91150808  0.97871645  0.956943036    0.32660569
VS             0.40901985  0.54055564  0.479712437    0.26454726
                  TasaParo    Ocupados          PIB         CANE
Poblacion      0.009850323  0.99550003  0.980976869  0.097205159
Mortalidad    -0.463972419 -0.32761124 -0.295604063  0.016432872
Natalidad      0.383038405  0.11174153  0.113829452 -0.123091063
IPC           -0.582234824  0.35818832  0.355394973 -0.191207090
NumEmpresas   -0.056232280  0.99834423  0.990277980  0.044834740
Industria     -0.080353746  0.96153241  0.942717675  0.123766207
Construccion  -0.109170963  0.99320060  0.985293522  0.029744519
CTH           -0.007188617  0.99112993  0.971695960  0.093619748
Infor         -0.108863576  0.96445717  0.985447530 -0.066339831
AFS           -0.031727168  0.99462721  0.989333140  0.085739618
APT           -0.078587345  0.99168825  0.996801753 -0.005592777
TasaActividad  0.027812476  0.35391218  0.330715195 -0.116659302
TasaParo       1.000000000 -0.05461326 -0.095297068  0.391013190
Ocupados      -0.054613263  1.00000000  0.992242627  0.048739757
PIB           -0.095297068  0.99224263  1.000000000 -0.007093683
CANE           0.391013190  0.04873976 -0.007093683  1.000000000
TVF            0.011585501  0.98216232  0.956878285  0.152988299
VS             0.095209736  0.53953310  0.469301776  0.335815536
                      TVF          VS
Poblacion      0.99071731  0.56653976
Mortalidad    -0.33230307 -0.24903743
Natalidad      0.08444871 -0.02766720
IPC            0.34095210  0.19117175
NumEmpresas    0.98226824  0.54044321
Industria      0.96533176  0.56716093
Construccion   0.97574923  0.55654176
CTH            0.99103137  0.57820586
Infor          0.91150808  0.40901985
AFS            0.97871645  0.54055564
APT            0.95694304  0.47971244
TasaActividad  0.32660569  0.26454726
TasaParo       0.01158550  0.09520974
Ocupados       0.98216232  0.53953310
PIB            0.95687829  0.46930178
CANE           0.15298830  0.33581554
TVF            1.00000000  0.66764132
VS             0.66764132  1.00000000
# Hacemos un corrplot para observar nuestros resultados de la matriz de correlaciones
corrplot(cor(provincias_df), type = "upper",
         tl.col = "black",  method = "ellipse")
# Generamos otra matriz de tipo numérico para ver más exactamente estas correlaciones
corrplot(cor_mat, method = 'number')

Podemos observar como las variables Poblacion, NumEmpresas, Industria, Construccion, CTH, Infor, AFS, APt, Ocupados, PIB y TVF tienen una alta correlación positiva entre todas ellas. También observamos que por ejemplo la tasa de paro tiene una correlación negativa media con las variables Mortalidad e IPC, a mayor TasaParo, menor IPC y Mortalidad

Ejercicio 2:

Estandariza los datos y guardalos en provincias_std

# Estandarizamos los datos selecionando solamente las variables númericas.
provincias_std_df <- provincias_df %>% 
  mutate(across(where(is.numeric),
                ~scale(.)))

Ejercicio 3:

Calcula con eigen() los autovalores y autovectores de la matriz de correlaciones e interpreta dichos resultados en relación a las componentes principales de las variables originales.

# Calculamos el número de autoelementos con la función eigen

autoelementos <- eigen(cor_mat)
autoelementos
eigen() decomposition
$values
 [1] 1.146640e+01 2.560508e+00 1.634097e+00 9.340488e-01 4.565320e-01
 [6] 4.143630e-01 3.071743e-01 1.166154e-01 7.309913e-02 2.034496e-02
[11] 9.027568e-03 3.566115e-03 2.372720e-03 8.013952e-04 5.472749e-04
[16] 3.512710e-04 1.028975e-04 4.950858e-05

$vectors
             [,1]         [,2]         [,3]        [,4]         [,5]
 [1,]  0.29352698  0.002493342  0.049947340 -0.05339540 -0.015898841
 [2,] -0.10629199 -0.527120141  0.188867032 -0.16131678  0.024146585
 [3,]  0.04062702  0.495419403 -0.270681171 -0.10967036 -0.382061614
 [4,]  0.10991169 -0.365322291 -0.262317619  0.43504738 -0.556757431
 [5,]  0.29418239 -0.026147510  0.007952241 -0.06913798 -0.006367061
 [6,]  0.28562283 -0.044737470  0.046369149  0.02345108 -0.150042973
 [7,]  0.29326489 -0.045381770 -0.012082096 -0.02639413  0.008113738
 [8,]  0.29286608 -0.010617503  0.048841149 -0.02758090 -0.028366126
 [9,]  0.28150192 -0.042018125 -0.064640257 -0.22152688  0.070433510
[10,]  0.29246592 -0.016454205  0.039554303 -0.09168100  0.003041574
[11,]  0.29072490 -0.029433207 -0.028068230 -0.14186101  0.031732816
[12,]  0.11433729  0.330614591 -0.362734482  0.46305159  0.133043722
[13,] -0.01399634  0.461562171  0.387356995 -0.22020186 -0.055362718
[14,]  0.29442838 -0.016838806  0.002429338 -0.06005252 -0.001232463
[15,]  0.29090708 -0.036157691 -0.037491740 -0.13360720 -0.008622583
[16,]  0.01778860  0.096184477  0.656743135  0.27839359 -0.488037746
[17,]  0.29156666 -0.001599604  0.099761847  0.04414466  0.046676773
[18,]  0.17234327  0.047821027  0.290142940  0.56712077  0.502605369
              [,6]         [,7]         [,8]         [,9]
 [1,]  0.009261485 -0.067375388  0.049695939  0.063533937
 [2,] -0.033735542  0.194593899 -0.677240259  0.377641454
 [3,]  0.313460111  0.588024487 -0.256257868  0.063132926
 [4,]  0.350737255 -0.328406660 -0.146407863 -0.180898036
 [5,] -0.006803308 -0.016541352  0.004345160  0.087585774
 [6,]  0.061617223  0.064730810  0.277225726  0.598423544
 [7,] -0.006262106  0.026640155  0.030059205  0.029546241
 [8,]  0.047239229 -0.068140824  0.107571562  0.261268280
 [9,] -0.125617691  0.051367829 -0.249587279 -0.415131011
[10,] -0.054714373  0.018516638 -0.071851535 -0.178586941
[11,] -0.080055846  0.008053971 -0.124821218 -0.199015131
[12,] -0.528510461 -0.186075273 -0.370767601  0.246498807
[13,]  0.304199666 -0.591402972 -0.343449492  0.089255270
[14,] -0.039890164 -0.023453829  0.005640881 -0.009548811
[15,] -0.077030649  0.008952134 -0.056398210 -0.156415106
[16,] -0.419227586  0.199631828  0.013485836 -0.149563592
[17,]  0.073722587 -0.005584984  0.069914036  0.095085695
[18,]  0.430852254  0.257315614 -0.125215945 -0.114868372
             [,10]        [,11]         [,12]        [,13]
 [1,]  0.350085935  0.186230539  0.1711785775  0.010288303
 [2,]  0.075589860 -0.007930229  0.0420207640  0.021526962
 [3,]  0.082446318 -0.020289162  0.0162179700 -0.017268779
 [4,] -0.024453594  0.018055215 -0.0165433445 -0.009256375
 [5,]  0.022328838 -0.155683246 -0.1868313262 -0.295730236
 [6,] -0.549771328  0.313257119 -0.0983659710  0.159247816
 [7,] -0.191834125 -0.821885503  0.1664388522  0.342872601
 [8,]  0.275273747 -0.176716870 -0.2371619940 -0.377496712
 [9,] -0.455403694  0.145292814 -0.1647985653 -0.169331304
[10,]  0.280705914  0.197698905 -0.4202117212  0.708492865
[11,] -0.063053183 -0.018374368 -0.2760928653 -0.285162833
[12,]  0.002558714  0.022324556  0.0006653841  0.022821245
[13,] -0.112317487 -0.013947370  0.0209740158  0.049593889
[14,]  0.154687198 -0.048862657  0.2063706502 -0.018496220
[15,] -0.098205180  0.224212469  0.7033944369  0.025058312
[16,] -0.018061942 -0.036012420  0.0068803352 -0.057390515
[17,]  0.320576240  0.138218764  0.1485323831 -0.081502147
[18,] -0.097744721  0.033767221  0.0002578474 -0.018041259
             [,14]        [,15]         [,16]         [,17]
 [1,]  0.174252449  0.528193532 -0.5074390165 -0.3645836076
 [2,]  0.012714926  0.006179773 -0.0007385454 -0.0017830808
 [3,]  0.007145884  0.010947891 -0.0010884443  0.0031311475
 [4,]  0.003959246  0.003740459  0.0067705625  0.0041585701
 [5,] -0.198427286 -0.216945648  0.1011828614 -0.2158364244
 [6,]  0.083661952 -0.036645845 -0.0274895935 -0.0289281260
 [7,]  0.040333104  0.172074291  0.0517103111 -0.1011674569
 [8,] -0.459614346  0.104642291 -0.1348807749  0.3944508893
 [9,]  0.063539475  0.453142059  0.0509083701  0.3227546858
[10,] -0.207133987 -0.137066568  0.0335887182  0.0637126478
[11,]  0.214532746 -0.367229939 -0.0374738932 -0.5220390566
[12,] -0.007663637  0.017628269  0.0166789316 -0.0042896852
[13,]  0.006561163 -0.031150623  0.0136695061 -0.0010611951
[14,]  0.550167465 -0.425843706 -0.2681093335  0.5192283126
[15,] -0.491058860 -0.230864767  0.0185550861 -0.0582894917
[16,] -0.009889913  0.008894585 -0.0107381109  0.0036300393
[17,]  0.265988870  0.187180605  0.7868348317 -0.0040644103
[18,] -0.049235072 -0.043019092 -0.1164353064  0.0006033047
              [,18]
 [1,] -0.1033819874
 [2,]  0.0093642618
 [3,]  0.0024522685
 [4,]  0.0006333815
 [5,] -0.7807168763
 [6,]  0.0538942552
 [7,]  0.0824471845
 [8,]  0.3488906784
 [9,] -0.0852073738
[10,] -0.0228329277
[11,]  0.4629930678
[12,]  0.0075771232
[13,]  0.0059635657
[14,] -0.1113370996
[15,]  0.0871095987
[16,] -0.0033788830
[17,]  0.0775931859
[18,] -0.0043631422

Ejercicio 4:

Haciendo uso de PCA() del paquete {FactoMineR} calcula todas las componentes principales. Repite de nuevo el análisis con el mínimo número de componentes necesarias para capturar al menos el 95% de la información de los datos.

# Haciendo uso de PCA() callculamos todas las componentes principales
pca_fit <-
  PCA(provincias_df, scale.unit = TRUE,
      ncp = ncol(provincias_df), graph = FALSE)

# Repetimos el proceso capturando al menos el 95% de la información de los datos
# Calculamos mediante la función "eig" cual es el numéro de componentes necesarios para tener al menos el 95%
pca_fit$eig
          eigenvalue percentage of variance
comp 1  1.146640e+01           6.370222e+01
comp 2  2.560508e+00           1.422504e+01
comp 3  1.634097e+00           9.078315e+00
comp 4  9.340488e-01           5.189160e+00
comp 5  4.565320e-01           2.536289e+00
comp 6  4.143630e-01           2.302017e+00
comp 7  3.071743e-01           1.706524e+00
comp 8  1.166154e-01           6.478631e-01
comp 9  7.309913e-02           4.061063e-01
comp 10 2.034496e-02           1.130275e-01
comp 11 9.027568e-03           5.015315e-02
comp 12 3.566115e-03           1.981175e-02
comp 13 2.372720e-03           1.318178e-02
comp 14 8.013952e-04           4.452195e-03
comp 15 5.472749e-04           3.040416e-03
comp 16 3.512710e-04           1.951506e-03
comp 17 1.028975e-04           5.716530e-04
comp 18 4.950858e-05           2.750477e-04
        cumulative percentage of variance
comp 1                           63.70222
comp 2                           77.92726
comp 3                           87.00558
comp 4                           92.19474
comp 5                           94.73102
comp 6                           97.03304
comp 7                           98.73957
comp 8                           99.38743
comp 9                           99.79353
comp 10                          99.90656
comp 11                          99.95672
comp 12                          99.97653
comp 13                          99.98971
comp 14                          99.99416
comp 15                          99.99720
comp 16                          99.99915
comp 17                          99.99972
comp 18                         100.00000
# Volvemos a realizar el análisis con este número de componentes y lo guardamos en una nueva variable
pca_fit_95 <-
  PCA(provincias_df, scale.unit = TRUE, ncp = 6, graph = FALSE)

Ejercicio 5:

Realiza las gráficas que consideres más útiles para poder interpretar adecuadamente las componentes principales obtenidas. ¿Cuál es la expresión para calcular la primera componente en función de las variables originales?

# Con fviz_eig() podemos visualizar la varianza explicada por cada componente
fviz_eig(pca_fit,
         barfill = "blue",
         addlabels = TRUE) +
  theme_minimal() +
  labs(x = "Componente",
       y = "% varianza explicada",
       title = "Porcentaje de varianza explicada")
# Visualizamos de forma manual la varianza acumulada y marcamos con una línea
# el límite del 95%
cumvar <- as_tibble(pca_fit$eig)
names(cumvar) <- c("lambda", "var", "cumvar")

ggplot(cumvar, aes(x = 1:18, y = cumvar)) +
  geom_col(fill = "pink") +
  geom_hline(yintercept = 95,
             linetype = "dashed", color="black") +
  theme_minimal() +
  labs(x = "Componente",
       y = "% varianza explicada",
       title = "% varianza acumulada")

Ejercicio 6:

¿Cuál es la contribución de las variables originales en cada componente principal seleccionada? Proporciona las nuevas coordenadas de los datos. ¿Cuál de las variables es la que está peor explicada?

# Mostramos el porcentaje de lo que aporta cada variable a la varianza explicada por cada componente (la suma de cada columna es el 100%)
pca_fit$var$contrib
                   Dim.1        Dim.2        Dim.3       Dim.4
Poblacion     8.61580869 6.216756e-04 2.494737e-01  0.28510690
Mortalidad    1.12979868 2.778556e+01 3.567076e+00  2.60231048
Natalidad     0.16505544 2.454404e+01 7.326830e+00  1.20275871
IPC           1.20805785 1.334604e+01 6.881053e+00 18.92662230
NumEmpresas   8.65432772 6.836923e-02 6.323813e-03  0.47800598
Industria     8.15804006 2.001441e-01 2.150098e-01  0.05499531
Construccion  8.60042932 2.059505e-01 1.459770e-02  0.06966501
CTH           8.57705398 1.127314e-02 2.385458e-01  0.07607058
Infor         7.92433313 1.765523e-01 4.178363e-01  4.90741583
AFS           8.55363151 2.707409e-02 1.564543e-01  0.84054061
APT           8.45209684 8.663137e-02 7.878255e-02  2.01245468
TasaActividad 1.30730170 1.093060e+01 1.315763e+01 21.44167757
TasaParo      0.01958975 2.130396e+01 1.500454e+01  4.84888573
Ocupados      8.66880711 2.835454e-02 5.901685e-04  0.36063054
PIB           8.46269279 1.307379e-01 1.405631e-01  1.78508842
CANE          0.03164342 9.251454e-01 4.313115e+01  7.75029908
TVF           8.50111166 2.558733e-04 9.952426e-01  0.19487506
VS            2.97022035 2.286851e-01 8.418293e+00 32.16259720
                     Dim.5        Dim.6        Dim.7        Dim.8
Poblacion     2.527731e-02  0.008577510  0.453944293  0.246968635
Mortalidad    5.830576e-02  0.113808680  3.786678534 45.865436885
Natalidad     1.459711e+01  9.825724095 34.577279772  6.566809467
IPC           3.099788e+01 12.301662219 10.785093429  2.143526238
NumEmpresas   4.053946e-03  0.004628499  0.027361631  0.001888042
Industria     2.251289e+00  0.379668213  0.419007777  7.685410328
Construccion  6.583274e-03  0.003921397  0.070969785  0.090355580
CTH           8.046371e-02  0.223154480  0.464317190  1.157164098
Infor         4.960879e-01  1.577980441  0.263865387  6.229380990
AFS           9.251174e-04  0.299366263  0.034286589  0.516264301
APT           1.006972e-01  0.640893842  0.006486645  1.558033658
TasaActividad 1.770063e+00 27.932330747  3.462400720 13.746861359
TasaParo      3.065031e-01  9.253743706 34.975747546 11.795755341
Ocupados      1.518964e-04  0.159122519  0.055008212  0.003181954
PIB           7.434893e-03  0.593372087  0.008014071  0.318075815
CANE          2.381808e+01 17.575176869  3.985286690  0.018186776
TVF           2.178721e-01  0.543501985  0.003119205  0.488797237
VS            2.526122e+01 18.563366447  6.621132525  1.567903296
                     Dim.9       Dim.10       Dim.11       Dim.12
Poblacion      0.403656111 1.225602e+01  3.468181374 2.930211e+00
Mortalidad    14.261306805 5.713827e-01  0.006288854 1.765745e-01
Natalidad      0.398576637 6.797395e-01  0.041165009 2.630225e-02
IPC            3.272409927 5.979783e-02  0.032599080 2.736822e-02
NumEmpresas    0.767126773 4.985770e-02  2.423727318 3.490594e+00
Industria     35.811073810 3.022485e+01  9.813002260 9.675864e-01
Construccion   0.087298038 3.680033e+00 67.549578054 2.770189e+00
CTH            6.826111430 7.577564e+00  3.122885224 5.624581e+00
Infor         17.233375618 2.073925e+01  2.111000192 2.715857e+00
AFS            3.189329543 7.879581e+00  3.908485723 1.765779e+01
APT            3.960702236 3.975704e-01  0.033761741 7.622727e+00
TasaActividad  6.076166191 6.547017e-04  0.049838582 4.427360e-05
TasaParo       0.796650328 1.261522e+00  0.019452912 4.399093e-02
Ocupados       0.009117979 2.392813e+00  0.238755925 4.258885e+00
PIB            2.446568540 9.644257e-01  5.027123117 4.947637e+01
CANE           2.236926812 3.262337e-02  0.129689442 4.733901e-03
TVF            0.904128940 1.027691e+01  1.910442674 2.206187e+00
VS             1.319474282 9.554030e-01  0.114022519 6.648526e-06
                    Dim.13       Dim.14       Dim.15       Dim.16
Poblacion      0.010584919  3.036391606 27.898840775 2.574944e+01
Mortalidad     0.046341011  0.016166935  0.003818960 5.454493e-05
Natalidad      0.029821073  0.005106366  0.011985631 1.184711e-04
IPC            0.008568048  0.001567563  0.001399104 4.584052e-03
NumEmpresas    8.745637241  3.937338798  4.706541418 1.023797e+00
Industria      2.535986690  0.699932223  0.134291796 7.556778e-02
Construccion  11.756162033  0.162675927  2.960956168 2.673956e-01
CTH           14.250376760 21.124534732  1.095000905 1.819282e+00
Infor          2.867309060  0.403726482 20.533772587 2.591662e-01
AFS           50.196214006  4.290448876  1.878724406 1.128202e-01
APT            8.131784119  4.602429924 13.485782801 1.404293e-01
TasaActividad  0.052080923  0.005873133  0.031075588 2.781868e-02
TasaParo       0.245955381  0.004304886  0.097036131 1.868554e-02
Ocupados       0.034211016 30.268423972 18.134286198 7.188261e+00
PIB            0.062791900 24.113880423  5.329854069 3.442912e-02
CANE           0.329367121  0.009781039  0.007911365 1.153070e-02
TVF            0.664259999  7.075007886  3.503657873 6.191091e+01
VS             0.032548701  0.242409229  0.185064227 1.355718e+00
                    Dim.17       Dim.18
Poblacion     1.329212e+01 1.068784e+00
Mortalidad    3.179377e-04 8.768940e-03
Natalidad     9.804085e-04 6.013621e-04
IPC           1.729371e-03 4.011722e-05
NumEmpresas   4.658536e+00 6.095188e+01
Industria     8.368365e-02 2.904591e-01
Construccion  1.023485e+00 6.797538e-01
CTH           1.555915e+01 1.217247e+01
Infor         1.041706e+01 7.260297e-01
AFS           4.059301e-01 5.213426e-02
APT           2.725248e+01 2.143626e+01
TasaActividad 1.840140e-03 5.741280e-03
TasaParo      1.126135e-04 3.556412e-03
Ocupados      2.695980e+01 1.239595e+00
PIB           3.397665e-01 7.588082e-01
CANE          1.317719e-03 1.141685e-03
TVF           1.651943e-03 6.020702e-01
VS            3.639765e-05 1.903701e-03
# Obtenemos unas nuevas coordenadas
pca_scores <- as_tibble(pca_fit$ind$coord)
names(pca_scores) <- c("PC_1", "PC_2", "PC_3", "PC_4", "PC_5", "PC_6", "PC_7", "PC_8", "PC_9", "PC_10", "PC_11", "PC_12", "PC_13", "PC_14", "PC_15", "PC_16", "PC_17", "PC_18")
pca_scores #nuevas coordenadas
# A tibble: 52 × 18
     PC_1      PC_2    PC_3   PC_4    PC_5    PC_6    PC_7    PC_8
    <dbl>     <dbl>   <dbl>  <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
 1 -1.41   0.473     0.0962 -0.458  0.131  -0.379  -0.0329 -0.0894
 2  3.38   0.540     1.92    2.42  -1.94    1.80    0.821  -0.252 
 3 -0.617  2.61      0.208  -0.142 -0.0419  0.0504 -0.0829  0.122 
 4 -1.44  -0.000844 -2.03   -0.113  0.468   0.0944  0.288  -0.719 
 5 -0.204 -1.95      1.30   -0.714 -0.369   0.0167  0.362  -0.319 
 6 -1.05   1.17      1.80   -0.854  0.0754 -0.575   0.0999 -0.0206
 7  1.53   0.260    -2.52    2.36   0.481  -0.567  -0.652   0.300 
 8 13.7   -1.61     -0.867  -0.279  1.04    0.765  -0.500  -0.194 
 9  0.576 -1.51     -1.18   -0.383  0.798   0.466  -0.213  -0.402 
10 -1.20  -1.55     -0.892   0.989  0.602   0.532  -0.458   0.258 
# … with 42 more rows, and 10 more variables: PC_9 <dbl>,
#   PC_10 <dbl>, PC_11 <dbl>, PC_12 <dbl>, PC_13 <dbl>, PC_14 <dbl>,
#   PC_15 <dbl>, PC_16 <dbl>, PC_17 <dbl>, PC_18 <dbl>
# Variable peor explicada
col <- c("#00AFBB", "#E7B800", "#FC4E07")
fviz_pca_var(pca_fit, col.var = "cos2",
             gradient.cols = col,
             repel = TRUE) +
  theme_minimal() + 
  labs(title = "Coordenadas de las variables",
       color = "Prop. var. explicada")
# La variable peor explicada analizando el gráfico será CANE

Ejercicio 7:

Calcula la matriz de distancias de los datos. Representa un mapa de calor de la matriz de datos, estandarizado y sin estandarizar, así como de la matriz de distancias. Comenta si se detectan inicialmente grupos de provincias.

# Calculamos la matriz de distancias
d <- dist(provincias_std_df, method = "euclidean")

# Visualizamos la matriz de distancias
fviz_dist(d, show_labels = TRUE)
# Mapa de calor de la matriz de datos provincias
heatmaply(provincias_df,
          seriate = "mean",
          row_dend_left = TRUE,
          plot_method = "plotly")
# Mapa de calor de la matriz de datos provincias estandarizado
heatmaply(provincias_std_df,
          seriate = "mean",
          row_dend_left = TRUE,
          plot_method = "plotly")

A priori observamos 4 grupos, uno constituido por Madrid y Barcelona,, otro por Valencia/Alicante, otro Ceuta/Melilla, y luego uno muy amplio que contiene el resto de ciudades del país, el cual analizandolo con detenimiento se podría observar que igual se dividiría en las ciudades de la mitad superior de España y otro de la mitad inferior.

Ejercicio 8:

Realiza varios análisis de clúster jerárquico con distintos enlaces y comenta las diferencias. En cada caso visualiza el dendograma y comenta cuántos clusters recomendarías usar.

# Clustering (single)
single_clust <- hclust(d, method = "single")

#Dendograma Clustering (single)
fviz_dend(single_clust, k =4,
          cex = 0.5,
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE,
rect= TRUE) +
  labs(title = "Dendograma Single")

Se observa que en el cluster simple nos aparecen 4 clusters, con Madrid, Barcelona Y Valencia diferenciadas, y luego el resto de ciudades del país. No me parece demasiado real y útil este análisis así que analizaremos el siguiente.

# Clustering (complete)
complete_clust <- hclust(d, method = "complete")

#Dendograma Clustering (complete)
fviz_dend(complete_clust, k =4,
          cex = 0.5,
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE,
rect= TRUE) +
  labs(title = "Dendograma Complete")

El dendograma del Clúster Complete calca el análisis que realizamos previamente con la matriz de distancias. Nos agrupa Madrid/Barcelona, Alicante/Valencia, Ceuta/Melilla y luego el resto de las ciudades del país, donde además se pueden observar algunos subgrupos dentro de este último clúster.
# Clustering (average)
average_clust <- hclust(d, method = "average")

#Dendograma Clustering (average)
fviz_dend(average_clust, k =4,
          cex = 0.5,
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE,
rect= TRUE) +
  labs(title = "Dendograma average")

Obtenemos un análisis muy similar al conseguido mediante el clúster complete.
# Clustering (centroid)
centroid_clust <-
  hclust(d, method = "centroid")
# Dendograma
fviz_dend(centroid_clust, k = 4,
          cex = 0.5, 
          k_colors =
            c("#2E9FDF", "#00AFBB",
              "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, 
          rect = TRUE) +
  labs(title = "Dendograma (centroid)")

Nos aparece un análisis que lo considero erróneo ya que no nos agrupa todas las Provincias
# Clustering (ward)
ward_clust <-
  hclust(d, method = "ward.D2")
# Dendograma
fviz_dend(ward_clust, k = 4,
          cex = 0.5, 
          k_colors =
            c("#2E9FDF", "#00AFBB",
              "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, 
          rect = TRUE) +
  labs(title = "Dendograma (Ward)")

Nos aparece un dendograma bastante interesante que nos agrupa a Madrid/Barcelona por una parte, Alicante/Valencia por otra, y luego dos grupos, uno que observamos que se corresponde a la parte norte del país y otro a la parte sur.

Ejercicio 9:

¿Qué número óptimo de clusters nos indican los criterios Silhoutte y de Elbow? Representar los individuos agrupados según el número de clusters elegido.

# Nº de clusters óptimo según Silhoutte
# Nos aparece que el número óptimo son 2
fviz_nbclust(provincias_std_df, kmeans,
             method = "silhouette") +
  theme_minimal() +
  labs(x = "nº clústeres (k)",
       y = "Variabilidad total intra-clústeres (W)",
       title = "Número óptimo basado en silhouette")
# Nº de clusters óptimo según Elbow
# Nos aparece que el número óptimo son 3
fviz_nbclust(provincias_std_df, kmeans,
             method = "wss") +
  geom_vline(xintercept = 3,
             linetype = 2) +
  theme_minimal() +
  labs(x = "nº clústeres (k)",
       y = "Variabilidad total intra-clústeres (W)",
       title = "Número óptimo basado en variabilidad total intra-clústeres")

Finalmente escogemos 4 como el número de clusters. Vamos a representarlos ahora según los criterios Silhoutte y Elbow

# Creamos variable Kclust para poder representar Silhouette
kclust <- kmeans(provincias_std_df,
                 centers = 4, iter.max = 50)
silS <- silhouette(kclust$cluster, d)
row.names(silS) <- row.names(provincias_std_df)

# Visualización para Silohuete
fviz_silhouette(silS, label = TRUE) +
  scale_fill_manual(values =
                      c("#2E9FDF", "#00AFBB",
                        "#E7B800", "#FC4E07")) +
  scale_color_manual(values =
                      c("#2E9FDF", "#00AFBB",
                        "#E7B800", "#FC4E07")) +
  theme_minimal() +
  labs(title =
         "Índice silhouette para k-means con k = 4") +
  # Giramos etiquetas eje
  theme(axis.text.x =
          element_text(angle = 90,
                       vjust = 0.5,
                       hjust=1))
  cluster size ave.sil.width
1       1    2          0.52
2       2   27          0.39
3       3   21          0.12
4       4    2          0.66
# Realizamos lo mismo para Elbow
# Clustering (ward)
ward_clust <-
  hclust(d, method = "ward.D2")
groups <- cutree(ward_clust, k = 4)
silE <- silhouette(groups, d)
row.names(silE) <- row.names(provincias_std_df)
# Visualización
fviz_silhouette(silE, label = TRUE,
                print.summary = FALSE) +
  scale_fill_manual(values =
                      c("#2E9FDF", "#00AFBB",
                        "#E7B800", "#FC4E07")) +
  scale_color_manual(values =
                      c("#2E9FDF", "#00AFBB",
                        "#E7B800", "#FC4E07")) +
  theme_minimal() +
  labs(title =
         "Índice silhouette para jerárquico Ward con k = 4") +
  # Giramos etiquetas eje
  theme(axis.text.x =
          element_text(angle = 90,
                       vjust = 0.5,
                       hjust = 1))

Ejercicio 10:

Con el número de clusters decidido en el apartado anterior realizar un agrupamiento no jerárquico de k-medias. Representar los clusters formados en los planos de las Componentes principales. Interpreta los resultados y evalúa la calidad del análisis clúster. Explica las provincias que forman cada uno de los clusters y comentar cuales son las características socioeconómicas que las hacen pertenecer a dicho cluster

# Clustering k-means
kclust <- kmeans(provincias_std_df,
                 centers = 4,
                 iter.max = 50)
kclust$totss
[1] 918
# Clustering
fviz_cluster(list(data =
                    provincias_std_df,
                  cluster =
                    kclust$cluster),
             palette =
               c("#2E9FDF", "#00AFBB",
                 "#E7B800", "#FC4E07"),
             ellipse.type = "convex", 
             repel = TRUE,
             show.clust.cent = FALSE) +
  labs(title = "Cluster (k-means)") +
  theme_minimal()

El análisis de K-medias nos arroja unos valores diferentes a los que hemos cribado según la matriz de distancias. Obtenemos también 4 clústers pero agrupados de manera diferente a la que hemos realizado nosotros manualmente. Por una parte tenemos agrupados Barcelona y Madrid que son las Provincias donde se concentrará la mayor riqueza del país ya que tienen el mayor nº de población, Num de empresas, Industria, Construcción etc. Luego nos aparece un clúster formado por las provincias medianas del país (Valencia, Baleares, Málaga…), provincias que están en el rango superior en valores como PIB, Industria, Construcción etc. Luego tenemos el grupo 3, el cual es algo diferente al que creamos nosotros con la matriz de distancias. Tenemos 3 provincias (Zaragoza, Lleida y Navarra) que podrían pertenecer al grupo 2 por sus características socioeconómicas. El resto de las provincias se encuentran en el rango medio, medio-alto o medio-bajo en todas las variables. En este grupo se concentran sobre todo las ciudades de la parte norte del país. Por último tenemos el grupo 4, que es el grupo donde se concentran los peores valores socioeconómicos, tasas de desempleo más altas, natalidad más alta, mortalidad más alta, PIB, Industria, Tasa de actividad más bajas de todo el país. Este grupo de provincias las podemos situar en la parte sur del país.

Podemos hacer un análisis bastante fiable de como están socioeconómicamente el país. Unas dos macrociudades en la punta, luego unas provincias medianas-grandes siguiendo, después provincias medianas del norte del país con valores medios y un grupo de provincias del sur rezagadas.